iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
Software Development

新手村的練功筆記系列 第 23

Day 23 SQL - GROUP BY & HAVING

  • 分享至 

  • xImage
  •  

今日課程範圍
SQL Lesson 3: Queries with constraints (Pt. 2)
https://sqlbolt.com/lesson/select_queries_with_constraints_pt_2

今天我們來學習一個好用的SQL語法
GROUP BYHAVING

當我們想要對以某個項目進行分組 並在分組後再以特定條件進行篩選要如何進行呢?

例如班級躲避球賽 先亂數拆成兩隊 並找出各隊最高的人出來猜拳決定誰先攻

這種先分組再進行條件的限制 便是GROUP BYHAVING派上用場的地方
想必你一定很好奇 我們先前不是學過可以使用WHERE來進行條件的篩選嗎?

那為什麼這邊要用HAVING 而不用 WHERE 呢?
我們想像一下 亂數拆隊就表示這個是臨時的 並非真正的編制
因此在原始編制的資料中並不實際存在

WHERE 無法使用在這個由GROUP BY 產生的臨時分組數據上
因此就需要用HAVING 語法來進行條件限制

我們實際來練習看看吧

第一題

第一題我們要找出所有Artists的人數
並且限制我們不要使用HAVING的寫法

我們可以使用WHERE來限制條件(Role = "Artist")
然後用COUNT()來計算人數

SELECT Role, COUNT(name) AS "Number of Artists" FROM employees
WHERE Role = "Artist"

第二題

第二題我們要找出各個Role的人數

因此我們可以使用 GROUP BY 先進行分組
再計算各組的人數即可

SELECT Role,Building,COUNT(name) AS "number of Employees"
FROM employees
GROUP BY Role

第三題

第三題稍微複雜一點點
我們要找出Role為工程師的人,與這些人的合計年資

因此 我們一樣先使用GROUP BY 進行分組
然後使用HAVING加入限制條件
最後再計算合計的總年資

SELECT Role,Building,SUM(Years_employed
) AS "total number of years employed"  FROM employees
GROUP BY Role
HAVING Role = "Engineer"

今天的練習先到這邊
GROUP BY是個相當好用的語法
對於我們在對資料進行分組上有很大的用處

我們明天再繼續


上一篇
Day 22 SQL - Aggregate function
下一篇
Day 24 SQL - 查詢(Query)語法複習
系列文
新手村的練功筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言